iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
Kubernetes

Kubernetes三十天就上手系列 第 21 篇

Day 21- Kubernetes 的套件管理工具 Helm

  • 分享至 

  • xImage
  •  

Kubernetes的套件管理工具 Helm

Helm 是 Kubernetes 的套件管理工具,旨在簡化應用的部署、升級和管理過程。它透過 Chart 封裝應用程式,使得 Kubernetes 上的應用部署變得更加容易且可管理。

Helm 的基本概念

  1. Chart:
    Chart 是 Helm 的封裝格式,類似於 Linux 的套件管理器(如 apt 或 yum)。它包含 Kubernetes 應用程式的所有必要資源,如 Deployment、Service、ConfigMap 等的 YAML 檔案範本。Chart 允許用戶定義應用程式的設定選項,這些選項可以根據不同的環境進行自定義。

  2. Values:
    Values 檔案提供了用戶自定義 Chart 中設定的途徑,使得同一個 Chart 可以根據開發、測試和正式環境的不同需求進行靈活設定。

  3. Release:
    Release 是基於 Chart 部署後的應用實例。每次使用 Helm 部署 Chart,都會創建一個唯一名稱的 Release,方便管理和追蹤應用版本。

  4. Repository:
    Chart Repository 是儲存和分發 Chart 的場所,類似於 Linux 的套件管理儲存庫。用戶可以從官方的 Helm Hub 或 Artifact Hub 等公共儲存庫中下載和安裝所需的 Chart。

Helm 的架構與組件

Helm 由以下主要組件構成:

  1. Helm CLI:這是用戶與 Helm 互動的命令列工具,負責 Chart 管理、Release 操作及與 Kubernetes API 進行通訊。

  2. Tiller(Helm 2 中的架構):在 Helm 2 中,Tiller 是運行在 Kubernetes Cluster中的伺服器端元件,負責管理 Release。需要注意的是,Helm 3 移除了 Tiller,改進了安全性並簡化了操作。

  3. Chart Repository:這些是 Helm Chart 的集中存放地,類似於 Linux 的軟體儲存庫。

Helm 的樣板語法與進階使用

Helm 使用 Go 樣板語法來定義和渲染 Chart。以下是一些進階的樣板語法與使用技巧:

  1. 樣板條件語句:Helm 支援 if、else 等條件語句,允許根據 Values 檔案中的參數來動態生成資源設定。

    apiVersion: v1
    kind: Service
    metadata:
      name: {{ .Values.serviceName }}
    spec:
      type: {{ if .Values.serviceType }}{{ .Values.serviceType }}{{ else }}ClusterIP{{ end }}
    
  2. 迴圈語法:可以使用 range 來遍歷列表或字典,生成動態數量的資源。

    spec:
      containers:
        {{- range .Values.containers }}
        - name: {{ .name }}
          image: {{ .image }}
        {{- end }}
    
  3. 函數支援:Helm 提供了一些內建函數,像是 default、quote、toYaml 等,可以用來處理複雜的樣板需求。

Helm 的使用場景與最佳實踐

  1. 多環境部署管理:Helm 非常適合管理開發、測試和正式環境中應用的不同設定。通過在 Values 檔案中定義不同環境的變數,可以靈活切換和部署。

  2. 應用的版本控制與回滾:Helm 的 Release 版本控制功能允許用戶輕鬆回滾至穩定版本,這在升級失敗或發生問題時尤為重要。

  3. Chart 的繼承與組合:在 Helm 中,可以透過子 Chart 來組合多個應用,實現複雜的系統架構。這些子 Chart 可以使用依賴管理功能自動安裝和設定。

  4. CI/CD 整合:Helm 常被整合到 CI/CD 流程中,用來自動化部署和升級 Kubernetes 應用。搭配工具如 Jenkins、GitLab CI 等,可以實現自動化的持續部署流程。

Helm 3 的改進與優勢

相比 Helm 2,Helm 3 移除了 Tiller,這不僅簡化了架構,也提高了安全性。以下是 Helm 3 的幾個重要改進:

  1. 去除了 Tiller:Helm 3 不再需要 Tiller,消除了與 Kubernetes RBAC 的衝突問題,也使得操作更為直觀。

  2. 原生支援多命名空間:Helm 3 支援針對不同的命名空間進行更靈活的管理,避免了在多租戶環境中的資源衝突。

  3. 改進的 Chart 分析:Helm 3 引入了更強大的 Chart 分析工具,可以在部署前檢查 Chart 的正確性,減少了設定錯誤。

安裝 Helm

1. 安裝 Helm CLI

Helm CLI 是管理和部署 Helm Chart 的命令行工具。以下是在 Linux 上安裝 Helm 的步驟:

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

上列指令如果正常執行就可以得到以下的輸出結果

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                Dload  Upload  Total   Spent    Left  Speed
100 11694  100 11694    0    0   8154      0  0:00:01  0:00:01 --:--:--  8154
Downloading https://get.helm.sh/helm-v3.15.3-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm

安裝完成後,可以使用以下命令驗證 Helm 安裝是否成功:

helm version

輸出結果如下:

version.BuildInfo{Version:"v3.15.3", GitCommit:"3bb50bbbdd9c946ba9989fbe4fb4104766302a64", GitTreeState:"clean", GoVersion:"go1.22.5"}

2. 添加 Chart Repository

要安裝 Helm Chart,首先需要添加一個 Chart Repository,例如官方的 stable Repository:

helm repo add stable https://charts.helm.sh/stable
helm repo update

使用 Helm 管理應用程式

1. 安裝應用程式

使用 Helm 安裝一個應用程式非常簡單。例如,要安裝一個 NGINX 應用程式,可以運行以下命令:

helm install my-nginx stable/nginx-ingress

在這個範例中:

  • my-nginx 是 Release 的名稱。
  • stable/nginx-ingress 是 Chart 的名稱。

安裝完成後,Helm 會創建一個名為 my-nginx 的 Release,並根據 Chart 的定義創建相關的 Kubernetes 資源。

2. 升級應用程式

當需要更新應用程式時,可以使用 Helm 升級已經安裝的 Release。例如,要更新 my-nginx 的設定,可以運行以下命令:

helm upgrade my-nginx stable/nginx-ingress --set controller.replicaCount=2

這將會更新 my-nginx Release,並將 NGINX 控制器的副本數設置為 2。

3. 刪除應用程式

要刪除一個已經安裝的應用程式,可以使用以下命令:

helm uninstall my-nginx

這將會刪除 my-nginx Release 以及它創建的所有 Kubernetes 資源。

管理 Helm Release

  • 查看 Release:使用 helm list 命令可以查看Cluster中所有的 Release。
  • 查看 Release 詳細資訊:使用 helm status <release-name> 可以查看特定 Release 的詳細資訊和狀態。
  • 回滾 Release:如果某次升級導致應用程式無法正常運行,可以使用 helm rollback <release-name> <revision-number> 來回滾到上一個版本。

總結

Helm 是一個強大且靈活的 Kubernetes 套件管理工具,通過使用 Chart,可以輕鬆地管理 Kubernetes 應用程式的安裝、升級和刪除。Helm 不僅簡化了應用程式的部署過程,還提供了版本管理和回滾功能,使得 Kubernetes 應用程式的運維管理更加高效和可靠。

在接下來的課程中,我們將探討如何使用 Kustomize 進行 Kubernetes 設定管理,這將進一步提升你在 Kubernetes 中的設定管理能力。


上一篇
Day 20- Kubernetes 中的命名空間與資源隔離
下一篇
Day 22- 使用 Kustomize 進行 Kubernetes 設定管理
系列文
Kubernetes三十天就上手 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言